package com.hzit.manager.service.impl;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson2.JSON;
import com.hzit.manager.api.domain.SpecificationOption;
import com.hzit.manager.api.domain.TypeTemplate;
import com.hzit.manager.service.ISpecificationOptionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import com.hzit.manager.mapper.TypeTemplateMapper;
import com.hzit.manager.service.ITypeTemplateService;

/**
 * 模板Service业务层处理
 * 
 * @author wf
 * @date 2023-08-29
 */
@Service
public class TypeTemplateServiceImpl implements ITypeTemplateService 
{
    @Autowired
    private TypeTemplateMapper typeTemplateMapper;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private ISpecificationOptionService optionService;

    /**
     * 查询模板
     * 
     * @param id 模板主键
     * @return 模板
     */
    @Override
    public TypeTemplate selectTypeTemplateById(Long id)
    {
        return typeTemplateMapper.selectTypeTemplateById(id);
    }

    /**
     * 查询模板列表
     * 
     * @param typeTemplate 模板
     * @return 模板
     */
    @Override
    public List<TypeTemplate> selectTypeTemplateList(TypeTemplate typeTemplate)
    {
        List<TypeTemplate> typeTemplates = typeTemplateMapper.selectTypeTemplateList(typeTemplate);
        for (TypeTemplate template : typeTemplates) {
            //1. 获取品牌列表字符串
            String brandIds = template.getBrandIds();
            //2. 以模板id为key，以品牌列表为值放到redis中
            redisTemplate.opsForHash().put("brandList",template.getId() + "",brandIds);
            //3. 获取规格列表
            String specIds = template.getSpecIds();
            List<Map> maps = JSON.parseArray(specIds, Map.class);
            for (Map map : maps) {
                //3.1 得到规格id
                String id =  map.get("id") + "";
                //3.2 根据规格id在规格选项表中查询出对应规格选项列表
                SpecificationOption option = new SpecificationOption();
                option.setSpecId(new Long(id));
                //3.3 根据外键spec_id在规格选项表中查询出规格选项列表
                List<SpecificationOption> options = optionService.selectSpecificationOptionList(option);
                //3.4 将此规格选项列表与map进行绑定
                map.put("options",options);
            }
            //4. 将规格及其规格选项列表放到redis中
            redisTemplate.opsForHash().put("specList",template.getId() + "",JSON.toJSONString(maps));

        }

        return typeTemplates;
    }

    /**
     * 新增模板
     * 
     * @param typeTemplate 模板
     * @return 结果
     */
    @Override
    public int insertTypeTemplate(TypeTemplate typeTemplate)
    {
        return typeTemplateMapper.insertTypeTemplate(typeTemplate);
    }

    /**
     * 修改模板
     * 
     * @param typeTemplate 模板
     * @return 结果
     */
    @Override
    public int updateTypeTemplate(TypeTemplate typeTemplate)
    {
        return typeTemplateMapper.updateTypeTemplate(typeTemplate);
    }

    /**
     * 批量删除模板
     * 
     * @param ids 需要删除的模板主键
     * @return 结果
     */
    @Override
    public int deleteTypeTemplateByIds(Long[] ids)
    {
        return typeTemplateMapper.deleteTypeTemplateByIds(ids);
    }

    /**
     * 删除模板信息
     * 
     * @param id 模板主键
     * @return 结果
     */
    @Override
    public int deleteTypeTemplateById(Long id)
    {
        return typeTemplateMapper.deleteTypeTemplateById(id);
    }
}
